# -*- coding: utf-8 -*-
"""
@Time    : 2024/9/12 16:19 
@Author  : ZhangShenao 
@File    : main.py 
@Desc    : 应用入口

依赖注入Dependency Inject,是一种软件设计模式
其目标是用于减少组件间的耦合度

在传统的变成模式中,一个组件通常需要自行创建和维护它所依赖的组件
这样会使得组件之间的耦合严重,代码的可维护性和可扩展性变差

而依赖注入的思想,是将组件间的依赖关系从组件自身中抽离出来
由外部容器负责维护和管理组件的依赖关系
这样一来,一个组件需要获取某个依赖组件时,只需要通过依赖注入,从容器中获取即可
这样就实现了组件间的解耦,大大提升了系统的可扩展性
"""
from injector import Injector, Binder

from dao import UserDao
from service import UserService


def config(binder: Binder) -> None:
    """配置依赖关系"""

    binder.bind(interface=UserDao, to=UserDao)
    binder.bind(interface=UserService, to=UserService)


if __name__ == '__main__':
    # 创建依赖注入容器injector,并加载依赖关系配置
    ioc = Injector(modules=config)

    # 从ioc容器中获取对象
    service = ioc.get(UserService)

    # 调用对象的方法
    user = service.get_by_id(2)
    print(user)
